package br.com.imob.dao;

import br.com.imob.modelo.Obra;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 14:29:47 01/02/2011 2011
 *  @version 
 */

public class ObraDao extends GenericDao {
	
	public ObraDao() {  }
	
	public Integer adicionarObra(Obra obra) {
		saveOrUpdatePojo(obra);
		return obra.getObraId();
	}
	
	public void removerObra(Obra obra) {
		removerPojo(obra);
	}

	/* Precisa definir o ID */
	public void atualizarObra(Obra recupera) {
		saveOrUpdatePojo(recupera);
	}

	/**
	 * Editar um Obra
	 * @param String oldObra
	 * @param String newObra
	 */
	public void atualizarObra(String oldObra, String newObra ) {
		if ( ( !"".equals(oldObra) && oldObra != null )
			&& ( !"".equals(newObra) && newObra != null ) ) 
			atualizarObra( getObraQNamed(oldObra), new Obra(newObra) );
	}
	
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarObra(Obra recuperar, Obra alterar) {
		recuperar = retriveObra(recuperar);
		
		if(alterar.getObra() != null)
			recuperar.setObra(alterar.getObra());
		if(alterar.getDataInicio() != null)
			recuperar.setDataInicio(alterar.getDataInicio());
		if(alterar.getDataTermino() != null)
			recuperar.setDataTermino(alterar.getDataTermino());
		
		saveOrUpdatePojo(recuperar);
	}
	
//	Artificio para Recuperar a Tupla de Obra
	protected Obra retriveObra(Obra recuperar) {
		if(recuperar.getObraId() != null)
			return getObra(recuperar.getObraId());
		else
			return getObraQNamed(recuperar.getObra());
	}
	
	
//	Consultas
	public Obra getObra(Integer key) {
		return getPojoByID(Obra.class, key);
	}
	public Obra getObraByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public Obra getObraQNamed(String fltrObra) {
		return getPojoByQNamed("Obra.findByObra", fltrObra);
	}
	
//	Listas
	public List<Obra> getObras() {
		return (List<Obra>) getALL(Obra.class);
	}
	public List<Obra> getObrasQNamedPRX(String fltrObra) {
		return getListByQNamedPRX("Obra.findLikeByObra", fltrObra);
	}
	public List<Obra> getObrasQNamedDtInit(String fltrDtInit) {
		return getListByQNamedPRX("Obra.findByDataInicio", fltrDtInit);
	}
	public List<Obra> getObrasQNamedDtTerm(String fltrDtTerm) {
		return getListByQNamedPRX("Obra.findByDataTermino", fltrDtTerm);
	}
	public List<Obra> getObrasByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}
}